package com.wh.wisdomsite.xbox.common.reponse;

import com.wh.wisdomsite.xbox.common.error.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Locale;


/***
 * 功能说明：业务错误通用响应类
 * @Package com.wh.wisdomsite.xbox.common.reponse
 * @author 谢泽鹏
 * @date 2016年11月07日 下午15:10
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2016
 * @version V1.0
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "error")
public class BusinessServiceErrorResponse extends ErrorResponse {

    private static final String ISV = "isv.";

    private static final String SERVICE_ERROR = "-service-error:";

    /**
     * 构造函数
     */
    public BusinessServiceErrorResponse() {

    }

    /**
     * 业务服务发生错的错误响应,业务代码自定义,错误的格式为:isv.***-service-error:###
     * serviceName为book.upload，error_code为INVLIAD_USERNAME_OR_PASSWORD，则错误码会被格式化为：
     * isv.book-upload-service-error:INVLIAD_USERNAME_OR_PASSWORD,根据这个键去查找对应的错误描述信息
     * 有服务调用者提供
     * @param method
     * @param errorCode
     * @param locale
     * @param params
     */

    public BusinessServiceErrorResponse(String method, String errorCode, Locale locale, Object... params) {
        MainError mainError = MainErrors.getMainError(MainErrorType.BUSINESS_LOGIC_ERROR, locale);
        String serviceName = transform(method);
        String subErrorCode = ISV + serviceName + SERVICE_ERROR + errorCode;
        SubError subError = SubErrors.getSubError(subErrorCode, subErrorCode, locale, params);
        getSubErrors().add(subError);
        setMainError(mainError);
    }
}
